/** Clase para consultar la carga del procesador **/

package clientegestionred;

import common.Consulta;
import common.Cons;
import common.SesionSNMP;

import java.util.LinkedList;

import org.snmp4j.smi.*;


public class UsoProcesador implements Cons {
    
    private Consulta consulta;

    /* Constructor */
    public UsoProcesador(SesionSNMP sesion) {
        consulta = new Consulta(sesion);
    }


    /* Obtener el numero de procesos que estan corriendo en el equipo */
    public int getNumberOfProcesses(){
        try{
            Variable []respuestas = consulta.get(new OID[]{HR_SYSTEM_PROCESSES});
            System.out.println("\nCarga de trabajo");
            System.out.println("\tNumero de procesos activos: " +
                    respuestas[0].toString());
            System.out.flush();
        }catch(java.io.IOException ioex){
            System.err.println("Error mientras se hacia GET.");
            System.err.flush();
            return -1;
        }
        return 0;
    }

    /* Obtener la carga de trabajo de cada uno de los
     procesadores de los que disponga el equipo */
    public int getProcessorLoad(){
        try{
            Variable []respuestas = consulta.getNext(new OID[]{HR_PROCESSOR_LOAD});
            OID []ultimosOIDs = consulta.getUltimosOIDs();

            // Comprobar si el OID obtenido es hijo del nodo hrProcessorLoad
            int size = HR_PROCESSOR_LOAD.size();
            int cont = 0;
            while(ultimosOIDs[0].leftMostCompare(size, HR_PROCESSOR_LOAD) == 0){
                cont ++;
                System.out.println("\tCarga del procesador " + cont +
                        ": " + respuestas[0].toString() + "%");
                respuestas = consulta.getNext(new OID[]{ultimosOIDs[0]});
                ultimosOIDs = consulta.getUltimosOIDs();
            }

        }catch(java.io.IOException ioex){
            System.err.println("Error mientras se hacia la consulta.");
            System.err.flush();
            return -1;
        }
        return 0;
    } //getProcessorLoad

    /* Metodo similar a getProcessorLoad(), pero en este caso
     devolviendo los distintos valores en un array */
    public LinkedList getListOfLoads(){

        LinkedList  loads = new LinkedList();

        try{
            Variable []respuestas = consulta.getNext(new OID[]{HR_PROCESSOR_LOAD});
            OID []ultimosOIDs = consulta.getUltimosOIDs();

            int size = HR_PROCESSOR_LOAD.size();
            // Comprobar si el OID obtenido es hijo del nodo hrProcessorLoad
            while(ultimosOIDs[0].leftMostCompare(size, HR_PROCESSOR_LOAD) == 0){
                loads.add(respuestas[0].toInt());
                respuestas = consulta.getNext(new OID[]{ultimosOIDs[0]});
                ultimosOIDs = consulta.getUltimosOIDs();
            }

        }catch(java.io.IOException ioex){
            System.err.println("Error mientras se hacia la consulta.");
            System.err.flush();
            return null;
        }
        return loads;
    } //getListOfLoads

 } //class
